/*
Copyright (C) 2008 raohmaru <http://www.raohmaru.com>

This file is part of Raohmaru AS3 Framework.

Raohmaru AS3 Framework is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Raohmaru AS3 Framework is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with Raohmaru AS3 Framework.  If not, see <http://www.gnu.org/licenses/>.
*/

package jp.raohmaru.motion 
{

/**
 * Esta clase reprenta el bote donde almacenar las instancias de la especia PaprikaSpice, reservándolas en memoria, reutilizándolas y creando nuevas
 * instancias sólo cuando es necesario.
 * @author raohmaru
 * @version 1.0
 * @source Basado en la clase com.flashdynamix.utils.ObjectPool de Shane McCartney <http://www.lostinactionscript.com/blog/index.php>
 */
public class PaprikaPot 
{
	internal var size :int,
				 length :int;
	private var _list :Array = [];
	
	
	/**
	 * Crea un nuevo objeto PaprikaPot. La primera vez que se llama al método <code>Paprika.add()</code> se crea una instancia de PaprikaPot
	 * para almacenar la especia.
	 */
	public function PaprikaPot() 
	{		
	}

	/**
	 * Obtiene una nueva instancia de la clase PaprikaSpice. Si no ha objetos disponibles se crea uno nuevo y se aumenta el tamaño de la rerserva.
	 * @return Una instancia de PaprikaSpice.
	 */
	public function retrieve() :PaprikaSpice 
	{
		if(length == 0) 
		{
			size++;
			return new PaprikaSpice();
		}
		
		return _list[--length];
	}

	/**
	 * Deposita un objeto, guardándolo en memoria para que vuelva a ser utilizado.
	 * @param item Una instancia de PaprikaSpice limpia de referencias.
	 */
	public function drop(item :PaprikaSpice) :void 
	{
		_list[length++] = item;
	}

	/**
	 * Vacía la lista interna de objetos, liberando memoria.
	 */
	public function empty() :void 
	{
		size = length = _list.length = 0;
	}
}
}